import java.util.*;

class Pair {
    public long x;
    public long y;
    public Pair(long x, long y) {
        this.x = x;
        this.y = y;
    }
}

public class Main {
    public static int func(int[] a ,int n,int x){
        int l = 0,r = n - 1;
        while(l < r){
            int mid = (r + l) / 2;
            if(a[mid] > x)r = mid;
            else l = mid + 1;
        }
        return r;
    }
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int p = in.nextInt();
        int[] a = new int[n];
        int min = Integer.MAX_VALUE,max = 0;
        for(int i = 0;i < n;i++){
            a[i] = in.nextInt();
            min = Math.min(a[i],min);
            max = Math.max(max,a[i]);
        }
        Arrays.sort(a);
        min = (min < 3 ? 3 : min);
        int ret = 0;
        for(int i = min;i <= max;i++){
            ret = Math.max(ret,func(a,n,i + p)-func(a,n,i - p) + 1);
        }
        System.out.println(ret);
    }
//    public static boolean[][] vis;
//    public static int[] dx = {1,-1,0,0};
//    public static int[] dy = {0,0,1,-1};
//    public static int n,m;
//    public static void func(int i,int j,ArrayList<ArrayList<Integer>> l){
//        for(int k = 0;k < 4;k++){
//            int x = i + dx[k];
//            int y = j + dy[k];
//            if(x >= 0 && x < n && y >= 0 && y < m && !vis[x][y] && l.get(x).get(y) == 1){
//                vis[x][y] = true;
//                func(x,y,l);
//            }
//        }
//    }
//    public static int citys (ArrayList<ArrayList<Integer>> l) {
//        // write code here
//        int ret = 0;
//        n = l.size();
//        m = l.get(0).size();
//        vis = new boolean[n][m];
//        for(int i = 0;i < n;i++){
//            for(int j = 0;j < m;j++){
//                if(!vis[i][j] && l.get(i).get(j) == 1){
//                    vis[i][j] = true;
//                    ret++;
//                    func(i,j,l);
//                }
//            }
//        }
//        return ret;
//    }
//
//    public static void main(String[] args) {
//        List<Integer> l1 = Arrays.asList(1,1,0);
//        List<Integer> l2 = Arrays.asList(1,1,0);
//        List<Integer> l3 = Arrays.asList(0,0,1);
//        ArrayList<ArrayList<Integer>> l = new ArrayList<>();
//        l.add(new ArrayList<>(l1));
//        l.add(new ArrayList<>(l2));
//        l.add(new ArrayList<>(l3));
//        System.out.println(citys(l));
//    }
//    public static void main(String[] args) {
//        Scanner sc = new Scanner(System.in);
//        int n = sc.nextInt();
//        int[] a = new int[n];
//        for (int i = 0; i < n; i++) {
//            a[i] = sc.nextInt();
//        }
//        Pair[] b = new Pair[100010];
//        int r = 0,l = 0;
//        while (l < n) {
//            int num = a[r];
//            int count = 0;
//            while(r < n && num == a[r]) {
//                r++;
//                count++;
//            }
//            long sum = count * num;
//            if(b[num] == null)b[num] = new Pair(0,0);
//            if(b[num].x != 0 && b[num].y != 0){
//                if(b[num].x > b[num].y){
//                    if(sum > b[num].y) b[num].y = sum;
//                }else {
//                    if(sum > b[num].x)b[num].x = sum;
//                }
//            }else if (b[num].x == 0){
//                b[num].x = sum;
//            }else b[num].y = sum;
//            l = r;
//        }
//        long ret = 0;
//        for(Pair p : b){
//            if(p != null) ret = Math.max(ret, p.x + p.y);
//        }
//        System.out.println(ret);
//    }

//
//    private static boolean check(long l) {
//        for (int i = 2; i <= Math.sqrt(l); i++) {
//            if (l % i == 0) {
//                return false;
//            }
//        }
//        return true;
//    }
//
//    private static long func(long i, long j) {
//        return i % j == 0 ? j : func(j, i % j);
//    }
}
